home *** CD-ROM | disk | FTP | other *** search
- SIZE.C Page 1
- [file d/t= 01/10/87 10:14] [clock d/t= 10 January 1987 10:18:31]
-
-
- 1 #define LINT_ARGS 1
- 2 #include <dos.h>
- 3 #include <string.h>
- 4 #include <memory.h>
- 5 #include <stdio.h>
- 6 #include <process.h>
- 7
- 8 main(argc, argv)
- 9 int argc;
- 10 char *argv[];
- 11 {
- 12
- 13 int i, j;
- 14 char file_name[80];
- 15 static int num_files = 0; /* number of files checked */
- 16 char dta[128];
- 17 static long total = 0; /* total size of all files */
- 18 static long size = 0;
- 19 static long tot_cl[] = {0, 0, 0, 0}; /* total clusters required */
- 20 static long max_cl[] = {315, 354, 316, 355};
- 21 static char over[]="**OVER**"; /* overflow message */
- 22 static char noover[]=" "; /* no overflow */
- 23 char far *fn_fp;
- 24 char far *dta_fp;
- 25 char *ovmsg[4];
- 26 union REGS inregs;
- 27 union REGS outregs;
- 28 struct SREGS segregs;
- 29
- 30 fn_fp = file_name;
- 31 dta_fp = dta;
- 32
- 33 if(argc > 1) {
- 34 strcpy(file_name, argv[1]);
- 35 if(!strchr(file_name, '.')) {
- 36 if(file_name[strlen(file_name) - 1] != '\\')
- 37 strcat(file_name, "\\*.*");
- 38 else
- 39 strcat(file_name, "*.*");
- 40 }
- 41 } else
- 42 strcpy(file_name, "*.*");
- 43
- 44 segread(&segregs); /* read current value of seg regs */
- 45
- 46 inregs.h.ah = 0x1A; /* set current dta address */
- 47 segregs.ds = FP_SEG(dta_fp);
- 48 inregs.x.dx = FP_OFF(dta_fp);
- 49 intdosx(&inregs, &outregs, &segregs);
- 50
- 51 segregs.ds = FP_SEG(fn_fp);
- 52 inregs.x.dx = FP_OFF(fn_fp);
- 53 inregs.x.cx = 0;
- 54 inregs.h.ah = 0x4E;
- 55
- SIZE.C Page 2
- [file d/t= 01/10/87 10:14] [clock d/t= 10 January 1987 10:18:31]
-
- 56 intdosx(&inregs, &outregs, &segregs); /* search for first file */
- 57
- 58 if(outregs.x.cflag == 0) { /* if file found */
- 59 ++num_files;
- 60 memcpy(&size, &dta[26], 4);
- 61 for(i = 0, j = 1; i < 4; i++, j *= 2)
- 62 tot_cl[i] += cluster(size, j);
- 63 total += size;
- 64
- 65 do { /* find rest of files */
- 66 inregs.h.ah = 0x4F; /* find next file */
- 67 intdos(&inregs, &outregs);
- 68
- 69 if(outregs.x.cflag == 0) { /* if file found */
- 70 ++num_files;
- 71 memcpy(&size, &dta[26], 4);
- 72 for(i = 0, j = 1; i < 4; i++, j *= 2)
- 73 tot_cl[i] += cluster(size, j);
- 74 total += size;
- 75 }
- 76 } while (outregs.x.cflag == 0);
- 77 }
- 78
- 79 printf("\n\nNOTE: FULL PATHNAMES AND/OR FILENAMES MAY BE USED");
- 80 printf(" AS ARGUMENT ON PROGRAM LINE");
- 81 printf("\n\n\tNumber of files = %d Total size = %ld bytes",
- 82 num_files, total);
- 83
- 84 printf("\n\n\n ");
- 85 printf("TOTAL STORAGE REQUIRED IN BYTES FOR THE FOLLOWING DISKS");
- 86 printf("\n\n 160K SS 180K SS 320K DS 360K DS ");
- 87 printf("10 MEG 20+MEG");
- 88 printf("\n floppy floppy floppy floppy ");
- 89 printf("hard hard");
- 90 printf("\n\n %8ld %8ld %8ld %8ld %8ld %8ld",
- 91 tot_cl[0] * 512L, tot_cl[0] * 512L, tot_cl[1] * 1024L,
- 92 tot_cl[1] * 1024L, tot_cl[3] * 4096L, tot_cl[2] * 2048L);
- 93 for(i = 0; i < 2; i++)
- 94 if(tot_cl[0] > max_cl[i])
- 95 ovmsg[i] = over;
- 96 else
- 97 ovmsg[i] = noover;
- 98 for(; i < 4; i++)
- 99 if(tot_cl[1] > max_cl[i])
- 100 ovmsg[i] = over;
- 101 else
- 102 ovmsg[i] = noover;
- 103 printf("\n %s %s %s %s\n\n", ovmsg[0], ovmsg[1], ovmsg[2],
- 104 ovmsg[3]);
- 105
- 106 exit(0);
- 107
- 108 }
- 109
- 110 cluster(file_size, num_sec)
- 111 long file_size;
- SIZE.C Page 3
- [file d/t= 01/10/87 10:14] [clock d/t= 10 January 1987 10:18:31]
-
- 112 int num_sec;
- 113 {
- 114
- 115 int num_clust; /* number of clusters required */
- 116
- 117 num_sec *= 512; /* number of bytes per cluster */
- 118 num_clust = file_size / (long)num_sec;
- 119 if(file_size > ((long)num_sec * (long)num_clust))
- 120 ++num_clust;
- 121
- 122 return(num_clust);
- 123
- 124 }
- 125 SIZE.C Page 4
- [file d/t= 01/10/87 10:14] [clock d/t= 10 January 1987 10:18:31]
-
-
- ah : 46 54 66
- argc : 8 9 33
- argv : 8 10 34
- cflag : 58 69 76
- cluster : 62 73 110
- cx : 53
- ds : 47 51
- dta : 16 31 60 71
- dta_fp : 24 31 47 48
- dx : 48 52
- exit : 106
- FP_OFF : 48 52
- FP_SEG : 47 51
- far : 23 24
- file_name : 14 30 34 35 36 36 37 39
- : 42
- file_size : 110 111 118 119
- fn_fp : 23 30 51 52
- h : 46 54 66
- i : 13 61 61 61 62 72 72 72
- : 73 93 93 93 94 95 97 98
- : 98 99 100 102
- inregs : 26 46 48 49 52 53 54 56
- : 66 67
- intdos : 67
- intdosx : 49 56
- j : 13 61 61 62 72 72 73
- L : 91 91
- LINT_ARGS : 1
- main : 8
- max_cl : 20 94 99
- memcpy : 60 71
- noover : 22 97 102
- num_clust : 115 118 119 120 122
- num_files : 15 59 70 82
- num_sec : 110 112 117 118 119
- outregs : 27 49 56 58 67 69 76
- over : 21 95 100
- ovmsg : 25 95 97 100 102 103 103 103
- : 104
- printf : 79 80 81 84 85 86 87 88
- : 89 90 103
- REGS : 26 27
- SREGS : 28
- segread : 44
- segregs : 28 44 47 49 51 56
- size : 18 60 62 63 71 73 74
- strcat : 37 39
- strchr : 35
- strcpy : 34 42
- strlen : 36
- tot_cl : 19 62 73 91 91 91 92 92
- : 92 94 99
- total : 17 63 74 82
- x : 48 52 53 58 69 76
- SIZE.C Page 5
- [file d/t= 01/10/87 10:14] [clock d/t= 10 January 1987 10:18:31]
-
-
-
- Allowable Symbols: 749
- Unique Symbols: 48